package com.yidu.ladder.base.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.yidu.ladder.base.dao.SubareaDao;
import com.yidu.ladder.base.domain.Riparea;
import com.yidu.ladder.base.domain.Subarea;
import com.yidu.ladder.base.domain.SubareaVo;
import com.yidu.ladder.base.service.SubareaService;

/**
 * 分区业务实现类
 * @author lw
 * @since 2020/1/10
 */
@Service
public class SubareaServiceImpl implements SubareaService{
	
	/**
	 * 保留对分区数据访问层的依赖注入
	 */
	@Autowired
	private SubareaDao subareaDao;
	
	public SubareaServiceImpl() {
		super();
	}

	public SubareaServiceImpl(SubareaDao subareaDao) {
		super();
		this.subareaDao = subareaDao;
	}

	public SubareaDao getSubareaDao() {
		return subareaDao;
	}

	public void setSubareaDao(SubareaDao subareaDao) {
		this.subareaDao = subareaDao;
	}


	@Override
	public Map<String, Object> findAllSubareaWithPage(SubareaVo subareaVo) {
		//计算分页
		subareaVo.setPage((subareaVo.getPage()-1)* subareaVo.getLimit());
		//查询所有
		List<Subarea> subareaList = subareaDao.findAllSubareaWithPage(subareaVo);
		//计数
		int total = subareaDao.countSubarea(subareaVo);
		//定义一个Map对象
		Map<String, Object> map = new HashMap<String, Object>();
		//将数据封装到结果映射中
		map.put("code", 0);
		map.put("msg", "");
		map.put("count", total);
		map.put("data", subareaList);
		return map;
	}


	@Override
	public int saveSubarea(Subarea subarea) {
		boolean result = subareaDao.addSubarea(subarea);
		return result == true ? 1 : 0;
	}

	@Override
	public String findAreaByPCD(Map<String, Object> paramMap) {
		return subareaDao.findAreaByPCD(paramMap);
	}

	@Override
	public boolean updataSubarea(Subarea subarea) {
		int result = subareaDao.updataSubarea(subarea);
		return result == 1 ? true : false;
	}

	@Override
	public boolean frozenORrecoverSubarea(String subareaIdStr, boolean flag) {
		//定义一个Map集合
		Map<String, Object> paramMap = new HashMap<String, Object>();
		//判断进行冻结还是还原
		char useable = flag == true ? 'N' : 'Y';
		//根据逗号分割ID
		String[] subareaIds = subareaIdStr.split(",");
		//定义执行结果返回的总数 因为成功返回1，所以把所有执行结果加起来正好就等于ID的总数
		int total = 0;
		//遍历分区Id集合
		for (int i =0; i < subareaIds.length; i++) {
			//添加ID
			paramMap.put("subareaId", subareaIds[i]);	
			//添加要修改的状态
			paramMap.put("useable", useable);
			//调用逻辑删除或还原方法
			int result = subareaDao.frozenORrecoverSubarea(paramMap);
			//计数
			total += result;
		}
		return total == subareaIds.length ? true : false;
	}

	@Override
	public List<Riparea> finAllRipareaName() {
		return subareaDao.finAllRipareaName();
	}

	@Override
	public boolean updateManageSubarea(String subareaId,String ripAreaId) {
		//定义一个Map集合
		Map<String, Object> paramMap = new HashMap<String, Object>();
		//根据逗号分割ID
		String[] subareaIds = subareaId.split(",");
		//定义执行结果返回的总数 因为成功返回1，所以把所有执行结果加起来正好就等于ID的总数
		int total = 0;
		//遍历分区Id集合
		for (int i =0; i < subareaIds.length; i++) {
			//添加ID
			paramMap.put("subareaId", subareaIds[i]);	
			//添加要修改的区域Id
			paramMap.put("ripAreaId", ripAreaId);
			//调用方法修改方法
			int result = subareaDao.updateManageSubarea(paramMap);
			//计数
			total += result;
		}
		return total == subareaIds.length ? true : false;
	}

	@Override
	public Map<String, Object> findAllSubareaWithRiparea(SubareaVo subareaVo) {
		//计算分页
		subareaVo.setPage((subareaVo.getPage()-1)* subareaVo.getLimit());
		//查询所有
		List<Map<String, Object>> subareaList = subareaDao.findAllSubareaWithRiparea(subareaVo);
		//计数
		int total = subareaDao.countSubarea(subareaVo);
		//定义一个Map对象
		Map<String, Object> map = new HashMap<String, Object>();
		//将数据封装到结果映射中
		map.put("code", 0);
		map.put("msg", "");
		map.put("count", total);
		map.put("data", subareaList);
		return map;
	}
	

}
